import { clearSession } from "@/libs/sessionStorage";
import { clearStorage } from "@/libs/localstoreage";
import store from '@/store'
import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from 'vue-router'
// import {moduleComp} from '@/libs/defineComponent'
import { message } from '@/libs/global/antDesignVue'
import notFind from '@/views/404/404'
import login from '@/views/login'
import visualLargeScreen from '@/views/visualLargeScreen'

const whiteList = ['/login', '/CBC/dataOverview'] // 白名单 无需校验

// 路由自动化
export const defaultRoutes: RouteRecordRaw[] = [
  {
    path: '/',
    redirect: '/CBC'
  },
  {
    path: '/:pathMatch(.*)',
    redirect: '/404'
  },
  {
    path: '/404',
    component: () => Promise.resolve(notFind)
  },
  {
    path: '/login',
    component: () => Promise.resolve(login)
  },
  {
    path: '/visualLargeScreen',
    component: () => Promise.resolve(visualLargeScreen)
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes: defaultRoutes
})

router.beforeEach((to, from, next) => {
  console.log(to, 'tototototottototototo');



  // 校验用户权限组
  // 当页面刷新 或者初次打开时首次获取用户组为null
  if (store.getters['login/GETROLES'] === null) {
    // 如果是路由白名单，则直接进入
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 如果不是路由白名单
      //? 1、 获取用户信息 -----------------------------------
      console.log('权限组为空，开始获取用户信息')
      store
        .dispatch('login/GetUserInfo')
        .then(userInfo => {
          console.log('用户信息获取成功', userInfo)
          const roles = userInfo.roles

          //? 2、 校验用户权限 -----------------------------------
          // 如果未登录过，用户权限组在第一次获取用户信息时为[0]或者false
          // 第一次打开页面 或者 本地缓存数据被清空
          if (!roles || roles.includes(0)) {
            //? 3、 用户权限校验失败时，返回登录页 -----------------------------------
            console.log('用户历史登录信息获取失败，前往登录页')
            clearStorage()
            clearSession()
            next('/login')
          } else {
            //? 4、 用户权限校验成功时，加载页面路由 -----------------------------------
            store
              .dispatch('login/GenerateRoutes')
              .then(res => {
                console.log('即将前往', to, to.redirectedFrom ? to.redirectedFrom : to.path)
                //? 5、 路由加载成功，跳转路由 -----------------------------------
                next(to.redirectedFrom ? to.redirectedFrom : to.path)
                // location.reload()
              })
              .catch(err => {
                //? 6、 路由加载失败，前往登录页 -----------------------------------
                clearStorage()
                clearSession()
                next('/login')

              })
          }
        })
        .catch(err => {
          //? 7、 用户信息获取失败，前往登录页 -----------------------------------
          clearStorage()
          clearSession()
          next('/login')
        })
    }
  } else {
    //? 8、 用户权限获取正常，前往登录页 -----------------------------------
    console.log(`用户权限正常，从${ from.path }, 跳转至${ to.path }`)
    if (to.fullPath == '/login') {
      next('/CBC/dataOverview')
    }
    // 权限组有数据直接跳转路由
    next()
  }
})

export default router